<?php
// vim: set ts=4 sw=4 sts=4 et:

/**
 * LiteCommerce
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to licensing@litecommerce.com so we can send you a copy immediately.
 *
 * PHP version 5.3.0
 *
 * @category  LiteCommerce
 * @author    Creative Development LLC <info@cdev.ru>
 * @copyright Copyright (c) 2011 Creative Development LLC <info@cdev.ru>. All rights reserved
 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
 * @link      http://www.litecommerce.com/
 * @see       ____file_see____
 * @since     1.0.0
 */

namespace XLite\Controller\Console;

/**
 * MOVED
 */
class CronAbstract extends \XLite\Controller\Console\AConsole
{
    /**
     * Time limit (seconds)
     *
     * @var   integer
     * @see   ____var_see____
     * @since 1.0.0
     */
    protected $timeLimit = 600;

    /**
     * Sleep time
     *
     * @var   integer
     * @see   ____var_see____
     * @since 1.0.0
     */
    protected $sleepTime = 3;

    /**
     * Preprocessor for no-action
     *
     * @return void
     * @see    ____func_see____
     * @since  1.0.0
     */
    protected function doNoAction()
    {
        $time = time();

        foreach (\XLite\Core\Database::getRepo('XLite\Model\Task')->getCurrentQuery() as $task) {
            $task = $task[0];
            $runner = $task->getOwnerInstance();
            $silence = !$runner->getTitle();
            if ($runner && $runner->isReady()) {
                if (!$silence) {
                    $this->printContent($runner->getTitle() . ' ... ');
                }

                $runner->run();

                if (!$silence) {
                    $message = $runner->getMessage();
                    if ($message) {
                        $this->printContent($runner->getMessage());
                    }
                }
            }

            if (!$silence) {
                $this->printContent(PHP_EOL);
            }
            \XLite\Core\Database::getEM()->flush();

            sleep($this->sleepTime);

            if (time() - $time > $this->timeLimit) {
                break;
            }
        }
    }
}
